package com.pshare.framework.mapper;

import java.util.List;
import java.util.Map;

/**
 * 持久层操作基类
 */
public interface BaseMapper<PK, T> extends SqlMapper {

	/**
	 * 根据主键id获取对象
	 * @param id
	 * @return T
	 */
	public T get(PK id);
	
	/**
	 * 根据主键获取VO对象
	 * @param id
	 * @return T
	 */
	public <T> T getVO(PK id);
	
	/**
	 * 插入实体对象 
	 * 
	 * @param bean
	 * @return
	 */
	public int add(T bean);

	/**
	 * 修改实体对象
	 * 
	 * @param bean
	 */
	public void update(T bean);
	
	/**
	 * 删除实体对象
	 * 
	 * @param params
	 */
	public void delete(Map<String, Object> params);
	
	/**
	 * 根据主键删除对象
	 * @param id
	 */
	public void delete(PK id);

	/**
	 * 根据条件查询结果集，不分页
	 * 
	 * @param params
	 * @return List<T>
	 */
	public List<T> query(Map<String, Object> params);
	/**
	 * 根据条件查询结果ID列表，不分页
	 * 
	 * @param params
	 * @return List<Long>
	 */
	public List<Long> queryId(Map<String, Object> params);

	/**
	 * 不指定泛型类型 按照实际的resultMap类型返回
	 * 
	 * @param params
	 * @return List<?>
	 */
	public List<?> queryVO(Map<String, Object> params);

	/**
	 * 根据条件查询结果集，适用于分页场景
	 * 
	 * @param params
	 * @return List<T>
	 */
	public List<T> queryList(Map<String, Object> params);
	
	/**
	 * 根据条件查询结果集，适用于分页场景
	 * 
	 * @param params
	 * @return List<T>
	 */
	public List<T> queryDetailListVO(Map<String, Object> params);
	

	/**
	 * 根据条件查询结果集，适用于分页场景
	 * 
	 * @param params
	 * @return List<?>
	 */
	public List<?> queryVOList(Map<String, Object> params);

	/**
	 * 根据条件查询结果集，适用于分页场景,适合于查询历史表
	 * 
	 * @param params
	 * @return List<?>
	 */
	public List<?> queryHistoryVOList(Map<String, Object> params);

	/**
	 * 根据条件计算相应的结果集数量
	 * 
	 * @param params
	 * @return int
	 */
	public int queryCount(Map<String, Object> params);
	
	/**
	 * 根据条件计算相应的结果集数量
	 * 
	 * @param params
	 * @return int
	 */
	public int queryDetailCount(Map<String, Object> params);
	
	/**
	 * 根据条件计算相应的结果集数量
	 * 
	 * @param params
	 * @return int
	 */
	public int queryVOCount(Map<String, Object> params);
	/**
	 * 根据条件计算相应的结果集数量
	 * 
	 * @param params
	 * @return int
	 */
	public int queryHistoryCount(Map<String, Object> params);
	/**
	 * 根据条件计算相应的结果集数量
	 * 
	 * @param params
	 * @return int
	 */
	public int queryHistoryVOCount(Map<String, Object> params);

}
